package com.hdp.kotlin_samples.base

/**
 * author:Administrator
 * on:2019/6/12:15:36
 * desc:
 * Kotlin中的Array，对应JAVA里面的[]
 *
 * 1、kotlin和JAVA数组对应关系，如果是引用类型：
 *      Array<User> <===> User[]
 *
 * 2、如果是基本类型，Kotlin定义了专门的类型数组，如：
 *      int[]  <===> IntArray
 *      并且定义了对应的构建方法 intArrayOf
 *
 * 3、Array的遍历：使用forEach扩展函数
 *    more:怎么一眼看出一个函数是扩展函数，IDE会用"黄色斜体"特殊显示
 *
 * 3、数组和其他类型的转换
 *      1）：Array转不可变List:toList()
 *      2）：Array转可变List:toMutableList()
 *      3）：Array转不可变set:toSet()
 *      4）：Array转可变set:toMutableSet()
 *      5）：多说一句，这些又是扩展函数，Array一些常用不常用的扩展，提供了一堆
 *
 */


fun main() {
//    test_array1()
//    test_array2()
//    test_array3()
//    test_array4()
//    test_array5()
    test_array6()
}

/**
 * 数组声明语法
 * 下面是一个初始化为int类型的元素，大小为5，所有元素都为6的数组。
 */
private fun test_array1() {
    var myArray = Array<Int>(6) { 6 }
    myArray.iterator().forEach { println(it) }
}

/**
 *  使用arrayOf函数声明数组
 */
private fun test_array2() {
    var myArray1 = arrayOf(1, 10, 4, 6, 15)
    var myArray2 = arrayOf<Int>(1, 10, 4, 6, 15)
    val myArray3 = arrayOf<String>("Ajax", "Prake", "Michel", "John", "Sumit")
    var myArray4 = arrayOf(1, 10, 4, "Ajax", "Prake")
    myArray1.forEach { print("$it ") }
    println()
    myArray2.forEach { print("$it ") }
    println()
    myArray3.forEach { print("$it ") }
    println()
    myArray4.forEach { print("$it ") }
}

/**
 * 创建制定类型的数组
 */
private fun test_array3() {
    //创建Int类型的数组
    var intArray: IntArray = intArrayOf(5, 10, 20, 12, 15)
    intArray.forEach { print("$it ") }
    //类似
    byteArrayOf()
    shortArrayOf()
    longArrayOf()
    ulongArrayOf()
    floatArrayOf()
    doubleArrayOf()
    booleanArrayOf()
}

/**
 * 创建制定大小的空的数组
 */
private fun test_array4() {
    var emptyArray = emptyArray<Int>()
    emptyArray.forEach { print("$it ") }
}


/**
 * 创建制定大小初始化元素全为null的数组
 */
private fun test_array5() {
    var nullArray = arrayOfNulls<Int>(5)
    nullArray[0] = 8
//    nullArray[11] = 123
//    nullArray.set(123, 11)
    nullArray.forEach { print("$it ") }
}

/**
 * array和其他类型的转换
 */
private fun test_array6() {
    val intArray = intArrayOf(11321, 254343, 314436, 314436, 2, 1)
    println(" intArray.toList():${intArray.toList()}")
    println(" intArray.toMutableList():${intArray.toMutableList()}")
    println(" intArray.toSet():${intArray.toSet()}")
    println(" intArray.toMutableSet():${intArray.toMutableSet()}")

}